package br.com.vilababy.sigvb.mb;

import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.primefaces.model.LazyDataModel;

import br.com.vilababy.sigvb.SIGVBUtil;
import br.com.vilababy.sigvb.constantes.RelacaoEnum;
import br.com.vilababy.sigvb.constantes.SIGVBEnum;
import br.com.vilababy.sigvb.modelo.Aluno;
import br.com.vilababy.sigvb.modelo.Autorizado;
import br.com.vilababy.sigvb.modelo.Responsavel;
import br.com.vilababy.sigvb.repository.ISIGVBRepository;

abstract public class AbstractAlunoMBean implements Serializable{

	/**
	 * @author Diego Patrick da Silva Santos
	 */
	private static final long serialVersionUID = 1L;
	
	private Aluno aluno = new Aluno();
	private Aluno alunoSelecionado = new Aluno();
	private List<Aluno> alunos = null;
	private Map<Long, Aluno> mapaAlunos = new HashMap<Long, Aluno>();
	private Responsavel paiDetalhe = new Responsavel();
	private Responsavel maeDetalhe = new Responsavel();
	private ISIGVBRepository<Responsavel> repositoryResponsavel;
	private ISIGVBRepository<Autorizado> repositoryAutorizado;
	private LazyDataModel<Aluno> alunosPaginacao;
	protected ISIGVBRepository<Aluno> repositoryAluno;
	protected List<Aluno> comboAlunos = null;
	
	public String exibirPesquisaAluno() {
		return SIGVBUtil.getValorMensagem(SIGVBEnum.NAV_PESQUISA_ALUNO.getValor());
	}
	
	public ISIGVBRepository<Aluno> getRepositoryAluno() {
		return repositoryAluno;
	}

	public void setRepositoryAluno(ISIGVBRepository<Aluno> repositoryAluno) {
		this.repositoryAluno = repositoryAluno;
	}

	public ISIGVBRepository<Responsavel> getRepositoryResponsavel() {
		return repositoryResponsavel;
	}

	public void setRepositoryResponsavel(
			ISIGVBRepository<Responsavel> repositoryResponsavel) {
		this.repositoryResponsavel = repositoryResponsavel;
	}

	public ISIGVBRepository<Autorizado> getRepositoryAutorizado() {
		return repositoryAutorizado;
	}

	public void setRepositoryAutorizado(ISIGVBRepository<Autorizado> repositoryAutorizado) {
		this.repositoryAutorizado = repositoryAutorizado;
	}

	public String exibirCadastroAluno() {
		return SIGVBUtil.getValorMensagem(SIGVBEnum.NAV_CADASTRO_ALUNO.getValor());
	}
	
	public final Aluno getAluno() {
		return aluno;
	}

	public final void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}
	
	public final Aluno getAlunoSelecionado() {
		return alunoSelecionado;
	}

	public final void setAlunoSelecionado(Aluno alunoSelecionado) {
		this.alunoSelecionado = alunoSelecionado;
	}

	public final List<Aluno> getAlunos() {
		return this.alunos;
	}

	public final void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}

	public LazyDataModel<Aluno> getAlunosPaginacao() {
		return alunosPaginacao;
	}

	public void setAlunosPaginacao(LazyDataModel<Aluno> alunosPaginacao) {
		this.alunosPaginacao = alunosPaginacao;
	}

	public List<Aluno> getComboAlunos() {
		return comboAlunos;
	}
	public void setComboAlunos(List<Aluno> comboAlunos) {
		this.comboAlunos = comboAlunos;
	}
	public final Responsavel getPaiDetalhe() {
		return paiDetalhe;
	}

	public final void setPaiDetalhe(Responsavel paiDetalhe) {
		this.paiDetalhe = paiDetalhe;
	}

	public final Responsavel getMaeDetalhe() {
		return maeDetalhe;
	}

	public final void setMaeDetalhe(Responsavel maeDetalhe) {
		this.maeDetalhe = maeDetalhe;
	}
	
	public final List<RelacaoEnum> getRelacoes() {
		return Arrays.asList(RelacaoEnum.values());
	}
	
	public Map<Long, Aluno> getMapaAlunos() {
		return mapaAlunos;
	}

	public void setMapaAlunos(Map<Long, Aluno> mapaAlunos) {
		this.mapaAlunos = mapaAlunos;
	}

	protected void adicionarMapaAlunos() {
		for (Aluno aluno : this.alunosPaginacao) {
			mapaAlunos.put(aluno.getId(), aluno);
		}
	}
	
	protected void limparTela() {
	}
	
}
